package org.example.infrastructure.repository.orm.redis.config.handler;

import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 布隆过滤器
 * 由于哈希碰撞的存在，当多位同时为1时，
 * 可能出现误报（False Positive），
 * 即报告元素可能在集合中，但实际上并未被插入过。
 * 但布隆过滤器不会出现漏报（False Negative），
 * 如果布隆过滤器说元素不在集合中，则这个结论是绝对正确的
 * 即不存在一定不存在，存在不一定存在
 */
@Configuration
public class BloomFilterConfig {

    @Bean
    public RBloomFilter<String> userRegistryCacheBloomFilter(RedissonClient redissonClient){
        RBloomFilter<String> userRegistryCacheBloomFilter = redissonClient.getBloomFilter("userRegistryCacheBloomFilter");
        userRegistryCacheBloomFilter.tryInit(100000000L, 0.001);
        return userRegistryCacheBloomFilter;
    }

}
